/*
 * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
 *
 * https://www.mall4j.com/
 *
 * 未经允许，不可做商业用途！
 *
 * 版权所有，侵权必究！
 */
package com.yami.shop.dao;


import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yami.shop.bean.app.dto.StationSalesDto;
import com.yami.shop.bean.model.Station;
import com.yami.shop.bean.param.StationDetailParam;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 自提点
 *
 * @author YXF
 * @date 2020-04-23 15:18:29
 */
public interface StationMapper extends BaseMapper<Station> {

    /**
     * 更新自提门店状态
     * @param handleId 自提门店id
     * @param status 状态
     */
    void updateStatus(@Param("handleId") Long handleId, @Param("status") int status);

    /**
     * 条件查询，分页获取自提门店
     * @param page 分页参数
     * @param station 条件查询参数
     * @return 分页自提门店
     */
    IPage<Station> getPage(PageParam<Station> page, @Param("station") Station station);

    /**
     * 获取自提门店详情
     * @param stationId 自提门店id
     * @return 自提门店详情
     */
    Station getStationInfoById(@Param("stationId") Long stationId);

    /**
     * 通过账号，获取自提门店信息
     * @param account 账号
     * @return 自提门店信息
     */
    Station getStationInfoByAccount(String account);

    /**
     * 获取自提点销售记录列表
     * @param shopId 店铺id
     * @param stationId 自提门店id
     * @param day 天数
     * @param month 月
     * @return 自提点销售记录列表
     */
    List<StationSalesDto> getStationSalesRecord(@Param("shopId") Long shopId, @Param("stationId") Long stationId, @Param("day") Date day, @Param("month") Date month);

    /**
     * 获取自提点核销销售记录列表
     * @param shopId 店铺id
     * @param stationId 自提门店id
     * @param day 天数
     * @param month 月
     * @return 自提点销售记录列表
     */
    List<StationSalesDto> getStationWriteOffSalesRecord(@Param("shopId") Long shopId, @Param("stationId") Long stationId, @Param("day") Date day, @Param("month") Date month);

    /**
     * 统计某个账号自提点数量
     * @param account 账号
     * @param stationId 自提门店id
     * @return
     */
    int getCountByAccount(@Param("account") String account, @Param("stationId") Long stationId);

    /**
     * 条件查询，分页获取经纬度最近的自提门店信息列表
     * @param page 分页参数
     * @param lat 纬度
     * @param lng 经度
     * @param stationName 自提门店名称
     * @param shopId 店铺id
     * @param stationId 自提门店id
     * @return 分页经纬度最近的自提门店信息列表
     */
    IPage<StationDetailParam> getStationList(Page page, @Param("lat") Double lat, @Param("lng") Double lng, @Param("stationName") String stationName,
                                             @Param("shopId") Long shopId, @Param("stationId") Long stationId);

    /**
     * 获取用户常用的自提点
     * @param userId 用户id
     * @param shopId 店铺id
     * @return 用户常用的自提点信息
     */
    StationDetailParam selectGoOften(@Param("userId") String userId, @Param("shopId") Long shopId);

    /**
     * 改变自提门店地址
     * @param stationId 自提门店id
     * @param addr 地址
     * @param phone 手机号
     */
    void changeStationAddr(@Param("stationId") Long stationId, @Param("addr") String addr, @Param("phone") String phone);
}
